package com.capgemini.playingwithsqlite.database; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import com.capgemini.playingwithsqlite.database.SQLiteHelper; import com.capgemini.playingwithsqlite.Episode; import com.capgemini.playingwithsqlite.Show; import com.capgemini.playingwithsqlite.database.ShowTable; import com.capgemini.playingwithsqlite.database.EpisodeTable; public class ShowDataSource { private SQLiteDatabase database; private SQLiteHelper dbHelper; private String[] allShowColumns = { ShowTable.COLUMN_ID, ShowTable.COLUMN_TITLE, ShowTable.COLUMN_YEAR, ShowTable.COLUMN_IMDB_ID}; private String[] allEpisodeColumns = { EpisodeTable.COLUMN_ID, EpisodeTable.COLUMN_SHOW_ID, EpisodeTable.COLUMN_TITLE, EpisodeTable.COLUMN_EPISODE, EpisodeTable.COLUMN_SEASON, EpisodeTable.COLUMN_OVERVIEW}; public ShowDataSource(Context context) { dbHelper = new SQLiteHelper(context); } public Show createShow(String title, int year, String imdbId) { ContentValues values = new ContentValues(); values.put(ShowTable.COLUMN_TITLE, title); values.put(ShowTable.COLUMN_YEAR, year); values.put(ShowTable.COLUMN_IMDB_ID, imdbId); long insertId = database.insert(ShowTable.TABLE_SHOW, null, values); return getShow(insertId); } public Show getShow(long id) { Cursor cursor = database.query(ShowTable.TABLE_SHOW, allShowColumns, ShowTable.COLUMN_ID + " = " + id, null, null, null, null); cursor.moveToFirst(); Show show = cursorToShow(cursor); cursor.close(); return show; } public List<Show> getAllShows() { List<Show> shows = new ArrayList<Show>(); Cursor cursor = database.query(ShowTable.TABLE_SHOW, allShowColumns, null, null, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { Show show = cursorToShow(cursor); shows.add(show); cursor.moveToNext(); } // Make sure to close the cursor cursor.close(); return shows; } public void deleteShow(Show show) { long id = show.getId(); List<Episode> episodes = getAllEpisodes(show.getId()); for (Episode episode : episodes) { deleteEpisode(episode); } database.delete(ShowTable.TABLE_SHOW, ShowTable.COLUMN_ID + " = " + id, null); } private Show cursorToShow(Cursor cursor) { Show show = new Show(); show.setId(cursor.getInt(0)); show.setTitle(cursor.getString(1)); show.setYear(cursor.getInt(2)); show.setImdbId(cursor.getString(3)); return show; } public Episode createEpisode(long showId, String title, int episode, int season, String aired) { ContentValues values = new ContentValues(); values.put(EpisodeTable.COLUMN_SHOW_ID, showId); values.put(EpisodeTable.COLUMN_TITLE, title); values.put(EpisodeTable.COLUMN_EPISODE, episode); values.put(EpisodeTable.COLUMN_SEASON, season); values.put(EpisodeTable.COLUMN_OVERVIEW, aired); long insertId = database.insert(EpisodeTable.TABLE_EPISODE, null, values); Cursor cursor = database.query(EpisodeTable.TABLE_EPISODE, allEpisodeColumns, EpisodeTable.COLUMN_ID + " = " + insertId, null, null, null, null); cursor.moveToFirst(); Episode newEpisode = cursorToEpisode(cursor); cursor.close(); return newEpisode; } public List<Episode> getAllEpisodes(int showId) { List<Episode> episodes = new ArrayList<Episode>(); Cursor cursor = database.query(EpisodeTable.TABLE_EPISODE, allEpisodeColumns, EpisodeTable.COLUMN_SHOW_ID + "=" + showId, null, null, null, null); cursor.moveToFirst(); while (!cursor.isAfterLast()) { Episode episode = cursorToEpisode(cursor); episodes.add(episode); cursor.moveToNext(); } cursor.close(); return episodes; } public void deleteEpisode(Episode episode) { long id = episode.getId(); database.delete(EpisodeTable.TABLE_EPISODE, EpisodeTable.COLUMN_ID + " = " + id, null); } private Episode cursorToEpisode(Cursor cursor) { Episode episode = new Episode(); episode.setId(cursor.getInt(0)); episode.setShowId(cursor.getInt(1)); episode.setTitle(cursor.getString(2)); episode.setSeason(cursor.getInt(3)); episode.setSeason(cursor.getInt(4)); episode.setOverview(cursor.getString(5)); return episode; } public void open() throws SQLException { database = dbHelper.getWritableDatabase(); } public void close() { dbHelper.close(); } }